<?php
/** ================================
 *  Intellect Board 3
 *  http://intblite.ru
 *  Модуль администрирования сайтового движка Intellect Board
 *  ================================ */

require('../index.php');

class AdminApplication extends Application {
  function main() {
    $this->init();
    $this->mode=4;

    $url=$this->parse_url(); // парсим URL как можно раньше. Это нужно как для аутентификации, так и для
    $urlparts = explode('/',$url);
    _dbg($urlparts);
    if (count($urlparts)==1) { // если URL имеет вид module/action.htm, т.е. не привязан к конкретному объекту
      $module=$urlparts[0]; // получаем имя модуля, действие уже записано в $this->action функцией parse_url
      $this->objdata=array();
    }
    elseif ($count($urlparts)==2) { // если URL имеет вид module/oid/action.htm, т.е. содержит указание на конкретный объект
      $module=$urlpars[0];
      $oid=intval($urlparts[1]);

      $sql = 'SELECT o.*, ot.module FROM '.DB_prefix.'object o, '.DB_prefix.'object_type ot '.
            'WHERE o.oid='.intval($oid).' AND o.type_id=ot.id ot.module="'.$this->slashes($module).'"'; // обрабатывть модуль можно только классом своего типа (хотя, возможно, такая проверка и не нужна).
      $this->objdata = $this->db->select_row($sql);
      if (!$this->objdata) $this->staus=404; // если объект такого типа не нашли
    }
    else { // в противном случае выполняем действие по умолчанию -- просмотр состояния CMS
      $module = 'admmain';
    }

    // выполнение запрошенного действия
    if ($this->status!=404 && $this->load_module($module)) { // если URL найден в базе и удалось подключить модуль для его обработки
      $this->main_object = new $module($this->objdata);
      if (!$this->action) $this->action='view';
      $main_data=$this->main_object->process_action($this->action);
    }
    else { // если объект не найден в базе или не удалось загрузить модуль для него
      $this->status=404;
      $this->message('Требуемый объект не найден или не может быть обработан данным модулем!',3);
      $this->mode=1;
      $main_data=new Html('error');
    }

    $blocks_data=array();
    if ($this->load_module('menu',false)) { // выводим админское меню
      $adminmenu = new menu;
      $blocks_data['ADMIN_MENU']=$adminmenu->show(2); // администраторское меню будет иметь фиксированный номер -- всегда 2.
    }
    else _dbg('Не удалось подключить модуль вывода меню!');

    $parser = new Parser();
    $output_data=$parser->parse($template,$this->mode,$this->status,$main_data,$blocks_data);
    $this->output($output_data); // выводим данные и закрываем наконец-то буфер

    if (session_id()!=false) session_write_close(); // сессию закрываем здесь, так как дальше закрывается соединение с БД и нужно успеть ее сохранить
    $this->db->close();
    $this->process_mail(); // отправляем почту в случае необходимости
  }

  function init() {
    chdir('..'); // переходим в родительский каталог, чтобы корректно работали подключения модулей и т.п.
    parent::init();
  }

  function is_admin_mode() {
    return $this->user->is_admin(); //TODO: временно, потом доделаем установку дополнительного cookie для более надежной аутентификации
  }
}

class AdminModule extends Module {
  
}

if (realpath($_SERVER['SCRIPT_FILENAME'])==__FILE__) { // создаем экземпляр приложения и запускаем его только в том случае, если вызов сделан напрямую
  /** @var AdminApplication **/
  $app = new AdminApplication;
  $app->main();
}


?>
